Гра П`ятнашки

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

Зміст
1. Вступ 3
2. Призначення і область застосування 4
3. Цілі і завдання 4
4. Використовувані методи 5
5. Опис алгоритму програми 8
6. Опис вхідних і вивідних даних 24
7. Програмне та апаратне забезпечення програми 24
8. Керівництво користувача 25
9. Висновок 30
10. Список літератури 31
Додаток 1 Лістинг програми 32
Додаток 2 Результати роботи. 46

1. Введення
Після вивчення предмета Основи алгоритмізації та програмування, необхідно виконати курсовий проект.
Після вивчення запропонованих тем вибрана дуже популярна і всім відома гра в «п'ятнашки».
При вивченні предметної області, з'ясувалося, що «п'ятнашки» на перший погляд проста гра, але для її реалізації необхідно звернеться практично до всіх розділів програмування в середовищі Турбо Паскаль.
Суть самої гри полягає в наступному:
- Гравець на екрані бачить табло, яке розбите на 16 клітин. У п'ятнадцяти з них розташовані неповторювані цифри, у випадковому порядку від 1 до 15 і одна порожня.
У загальному вигляді даний табло можна представити у вигляді таблиці 1:
Таблиця 1 - Зразок табло.
5
7
3
8
15
1
13
2
14
10
6
4
9
11
12
- Гравець повинен переміщати по однієї клітини з цифрою на порожнє місце.
- Так відбувається до тих пір, поки користувач не збудує послідовну комбінацію цифр (Таблиця 2), і лише після цього гравець вважається переможцем.

Таблиця 2 - Правильне заповнення табло.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

2. Призначення і область застосування
Дана програма є, комп'ютерної версії знаменитої гри «п'ятнашки». Це логічно не складна і досить проста в управлінні і використанні програма. Застосування даної програми можливі скрізь, адже в будь-якій роботі потрібен відпочинок, а дана простенька гра допоможе розслабитися й відволіктися від повсякденних справ.

3. Цілі і завдання.
Метою даної курсової роботи є поглиблення знань і розширення навичок з розробки алгоритмів та їх реалізації на персональному комп'ютері. Курсова робота виконана в середовищі Турбо Паскаль з використанням графічних можливостей мови.
У курсовій роботі використовуються основні можливості мови в роботі зі структурами, файлами, графікою.
В даній грі передбачалося створення:
a. інтуїтивно зрозумілого інтерфейсу;
b. скромного, але графічно точного табло, де здійснюється переміщення цифр;
c. зручного для користувача управління;
d. доступного для розуміння керівництва користувача;
e. списку кращих гравців, тобто тих гравців, які за найменшу кількість ходів зібрали необхідну комбінацію цифр.
f. Можливість у будь-який момент покинути гру.
У даній програмі використовувалися наступні розділи Турбо Паскаль:
- Управляючі структури (умова, цикли);
- Масиви (одновимірні, двовимірні);
- Символи і рядки;
- Процедури;
- Робота з файлами;
- Робота з графічними можливостями.
У підсумки вийшла програма - гра, в якій використовувалися основні можливості середовища Турбо Паскаль.

4. Використані методи
Програма виконана в середовищі програмування Турбо Паскаль. Сама програма - додаток Windows. Для виведення графічних об'єктів використовуються модуль Graph. Програмою обробляються події від натискання клавіш на клавіатурі, вибору відповідних пунктів меню, а також зчитування кількості ходів для ведення статистики кращих гравців.
Для того щоб не ускладнювати лістинг програми, вся програма розбита на процедури, кожна з яких відповідає за певну дію. Усю програму можна розділити на два основні розділи:
- Основні процедури, тобто ті процедури, які відповідають за саму гру і взаємодія з користувачем під час гри;
- Допоміжні процедури. Це ті процедури, які доповнюють даний додаток додатковими і дуже корисними функціями;
- Основна програма.
До основних процедур відносяться:
- Tablo;
- Vivod;
- Napravlenie;
- Poisk;
- Zamena;
- Proverka;
- Mesto;
- Game15
До допоміжних процедур входить:
- ReadFile;
- WriteFile;
- Bonus.
Алгоритм всієї програми описаний в пункті 5, а в даному розділі опишемо основні прийоми використовуваних процедур.
4.1 Основні процедури.
4.1.1 procedure Tablo;
Дана процедура формує табло, заповнене випадковими, неповторяющимися цифрами від 1 до 15 і одним порожнім клітиною. Процедура реалізована з використанням двох масивів: одномірний і двовимірний.
Одновимірний масив з 16 цілими числами заповнюється випадковим чином, причому, враховується, щоб цифри в даному масиві не повторювалися.
Кожній цифрі з одновимірного масиву присвоюється, аналогічний їй рядковий елемент і вводиться в двовимірний масив. Приміром, цифрі 5, присвоюється рядковий елемент '5 '. Виняток становить цифра 16, їй присвоюється пробіл.
4.1.2 procedure Vivod;
Процедура виведення на екран табло з цифрами сформоване на момент відображення. Якщо програма тільки занедбана, тоді на екран виводиться таблиця заповнене випадковим чином. Якщо гра вже йде то дана процедура виводить на екран ту комбінацію цифр, яка визначена користувачем під час гри.
4.1.3 procedure Napravlenie;
В цій процедурі користувачеві, за допомогою курсору, пропонується ввести напрям переходу. В цій процедурі зчитується код натиснутої клавіші, щоб надалі можна було здійснювати пересування.

4.1.4 Procedure Poisk;
У цій процедурі здійснюється пошук порожнього елемента. Це необхідно для того, щоб надалі користувач зміг щодо порожнього елемента зробити свій хід. Процедура зчитує кожен елемент двовимірного масиву і порівнює його з порожнім. Після того як порожній знайдений процедура запам'ятовує координати порожнього елемента, а саме рядок і стовпець.
4.1.5 procedure Zamena;
Програма в залежності від вибору напрямку здійснює перестановку елементів у двовимірному масиві.
Також в даній процедурі зчитується кожен хід користувача, щоб надалі, якщо користувач розкладе потрібний розклад швидше, ніж гравці, які грали раніше, можна було ввести інформацію про гравця у файл.
4.1.6 procedure proverka;
Після здійснення перестановки цифр, а іншими словами після чергового ходу, програма порівнює розстановку цифр у двовимірної матриці. Якщо поточна комбінація є правильною, тоді гравець вважається переможцем.
4.1.7 procedure Mesto;
У випадку якщо гравець вважається переможцем, то в дана процедура порівнює поточної результат (кількість ходів за яке гравець розклав розклад), з гравцями які грали раніше. Якщо цей гравець розклав швидше, то йому пропонується ввести ім'я і його ім'я і результат збережуться у файл.

4.1.8 procedure Game 15;
Ця процедура є основною. У неї підключається графічний модуль і відбувається основний процес гри.
Гра буде продовжуватись до тих пір, поки не буде розкладений правильний розклад або до тих пір поки користувач не перерве гру за допомогою клавіші ESC.
4.2 Допоміжні процедури.
4.2.2 procedure readFile;
Після введення імені користувача (пункт 4.1.7), інформація додається у файл res.txt
4.2.3 procedure writeFile;
Дана процедура зчитує інформацію з файлу res.txt і виводить на екран отримані дані, а саме гравців, які за найменшу кількість ходів розклали необхідну комбінацію.
4.2.4 procedure bonus;
Маленька хитрість даної програми. Вона призначена для розробника програми і для викладача перевіряючого правильність написання гри. Щоб, при перевірці, викладачеві не була потрібна проходити всю гру, достатньо натиснути клавішу End на клавіатурі і розклад майже разолжется. Також ця процедура була б дуже корисна розробнику, для налагодження та тестування програми.

4.3 Основна програма.
В основній програмі на екрані виводиться Головне меню і залежно від обраних користувачем дій відбувається взаємодія з процедурами.
Насправді деякі процедури можна було об'єднати, тому що основна мета використання процедур це виняток повторюваних дій, а в даній програмі деякі процедури використовуються один раз і їх можна було записати в інші процедури або основну програму, але, на мій погляд, так набагато зручніше, як при програмуванні, так і при перевірки.

5. Опис алгоритму програми
Незважаючи на простоту цієї програми, написання алгоритму виявилося досить нелегким завданням. У зв'язку з цим довелося розділити його, з метою його читабельності і доступності.
Основний алгоритм програми розбитий на чотири розділи (схема 1):
- Опис;
- Управління;
- Гра;
- Результати.
Головне меню
Початок



Гра
Результати
Опис
Кінець


Схема 1 - Основний алгоритм програми
5.1 Розділ Опис.
Даний розділ призначений для ознайомлення користувачем, з можливостями, програми.
Розділ реалізований за допомогою процедури Avtor. Дана процедура зчитує інформацію з файлу fhelp1.txt і виводить зчитану інформацію на екран, для ознайомлення користувачеві.
Загальний алгоритм даного розділу полягає в наступному (Схема 2):
- Читання інформації з файлу fhelp1.txt;
- Виведення інформації з файлу на екран;
- Закриття файлу.
Початок
Читання файлу
Закриття файлу
Виведення інформації з файлу на екран
Кінець


Схема 2 Алгоритм - Опис
5.1.1 Читання файлу.
За допомогою процедури assign (f, 'fhelp1.txt'), пов'язуємо файлову змінну f з файлом fhelp1.txt, до якого відбувається звернення. У даному варіанті не описується повний шлях до файлу, маючи на увазі, що даний файл знаходиться в корені каталогу з програмою. Це необхідно в тих випадках, коли користувач захоче перенести файли програми в будь-який зручний для нього місце, якби був прописаний повний шлях, тоді користувач не міг би переміщати файли програми, а в разі переміщення, інформація з розділу Опис, не виводилася б на екран . У цьому випадку, необхідно було б точно встановлювати файли програми, в те місце, де було б прописано. Далі за допомогою процедури reset (f) відкриваємо файл для читання.
5.1.2 Виведення інформації на екран здійснюється за допомогою інструкцій readln (f, g1); writeln (g1). У даній інструкції, змінної g1, спочатку за допомогою readln присвоюється рядок з файлу fhelp1.txt, а потім за допомогою writeln виводиться на екран вміст змінної g1.
5.1.3 Закриття файлу, здійснюється за допомогою процедури close (f);
5.2 Розділ Управління.
У даному розділі, користувачеві пропонується ознайомитися з клавішами управління.
Розділ реалізований за допомогою процедури help. Дана процедура зчитує інформацію з файлу fhelp.txt і виводить зчитану інформацію на екран для ознайомлення користувачеві.
Реалізована дана процедура, точно таким же способом, як і в розділі 5.1 Опис, за винятком того, що звернення відбувається до файлу fhelp.txt, з цього докладно зупинятися на даному розділі не має сенсу.
5.3 Розділ Гра.
Даний розділ є основним. Саме в цьому розділі відбуваються основні події. Реалізований цей алгоритм за допомогою процедури Game15.
Алгоритм даного розділу полягає в наступному:
- Ініціалізація графічного режиму;
- Заповнення в пам'яті комп'ютера табло випадковими цифрами;
- Висновок табло на екран;
- Введення напрямки переходу;
- Пошук чистого елемента;
- Переміщення елементів табло;
- Перевірка;
- Підсумок;
- Введення особистих даних.
Схематично, даний алгоритм, зображений на схемі 3.
Початок
Ініціалізація графічного режиму



Заповнення табло випадковими числами



Пошук чистого елемента
Висновок табло інформації
Введення напрями переходу
Переміщення елементів табло



Перевірка
розкладений чи розклад
Блок-схема: рішення: Перевірка розкладений чи розклад


Ні
Ні
Так
Підсумок
У списку кращих
Блок-схема: рішення: Підсумок У списку кращих


Введення особистих даних
Паралелограм: Введення особистих даних
Так



Ні
Кінець
Блок-схема: знак завершення: Кінець

Схема 3 - Розділ Гра.
5.3.1 Ініціалізація графічного режиму здійснюється в цій же процедурі Game15, при переході з Головного меню програми в розділ ГРА. Перехід до графічного режиму здійснюється, за допомогою процедури InitGraph (grDriver, grMode, grPath), де grDriver - це використовувані програмою драйвер відеоадаптера (VGA), grMode - режим роботи відеосистеми (VGAHi), grPath - це місце знаходження файлу EGAVGA.BGI на диску (як і у випадку з файлами, пишемо тільки ім'я і розширення файлу, а не повний шлях, для того щоб в майбутньому можна було переміщати файли програми).
5.3.2 Заповнення табло випадковими цифрами.
У пам'яті комп'ютера створюється табло, в якому, надалі будуть проводитися перестановки. Табло складається з шістнадцяти клітин (чотири рядки і чотири шпальти), яке заповнюється п'ятнадцятьма, неповторяющимися цифрами від 1 до 15 і одним порожнім клітиною.
Даний розділ реалізований за допомогою процедури Tablo. Фактично табло, яке описується раніше це двовимірний масив з цифрами від 1 до 15 і нуль. Але відображення цифр на екрані і нуля, замість порожнього елемента, робить табло не красивим. Звідси випливає, що двовимірний масив, повинен містити рядкові або символьні елементи.
Наступному моментом реалізації даної процедури, є заповнення табло випадковими цифрами. Для заповнення табло випадковими цифрами використовується функція random, яка є генератором випадкових цифр, але працює відповідно тільки з цифрами, а в нас рядковий двовимірний масив.
Проаналізувавши вище сказане, приходимо до того, що необхідно створити два масиви. Один одновимірний з шістнадцяти елементів типу integer, другий двовимірний, чотири на чотири, типу string. Спочатку одновимірний масив, у випадковому порядку, заповнюється цілими неповторяющимися цифрами від 1 до 16, а потім в залежності від розташування цифр, заповнюється двовимірний рядковий масив. Наприклад, якщо перший елемент одновимірного масиву дорівнює цифрі 11 І першому елементу двовимірного масиву буде присвоєно рядок «11».
Загальний алгоритм даного розділу полягає в наступному (Схема 4):
- Вибір випадкового числа;
- Перевірка на наявність збігів у масиві;
- Занесення інформації в масив;
- Перевірка чи заповнений масив;
- Заповнення двовимірного масиву.
Початок
Вибір випадкового числа
Перевірка
чи є збіги


Так


Ні
Занесення інформації в масив
Перевірка
масив заповнений


Ні


Так
Кінець
Заповнення двовимірного масиву


Схема 4 - Розділ Табло
5.3.2.1 Вибір випадкового числа.
Деякої змінної b присвоюється випадкове число, за допомогою функції random. При чому функція random обмежена інтервалом від 1 до 16.
5.3.2.2 Перевірка на наявність збігів у масиві
Змінна b порівнюється з кожним елементом масиву bs [i], за допомогою інструкцій For та if. Якщо такий елемент вже присутній в одновимірному масиві, тоді змінної b, знову присвоюється випадкове число. Так відбувається до тих пір, поки змінної b не буде привласнена цифра, якої ще немає в масиві.

5.3.2.3 Занесення інформації в масив.
Значення змінної b, яке було знайдено раніше, вноситься в масив bs [i], за останнім елементом внесений в масив
5.3.2.4 Перевірка чи заповнений масив.
Програма перевіряє чи заповнений масив повністю, якщо немає, то алгоритм починається з пункту 5.3.2.1.
У результаті ми маємо одновимірний масив заповнений, у випадковому порядку неповторюваним цифрами від 1 до 16.
5.3.2.5 Заповнення двовимірного масиву.
Заповнення двовимірного масиву, за допомогою інструкції For і змінних i і j, які позначають стовпець і рядок.
Алгоритм заповнення двовимірного масиву полягає в наступному:
- Спочатку змінної z присвоюється одиниця. Дана змінна нам необхідна як лічильник.
- Кожному елементу j рядка і i стовпця присвоюється рядковий елемент, в залежності від цифри стоїть під номером z в одновимірному масиві, якщо поточної елемент одновимірного масиву містить цифру 8, то поточного елементу двовимірного масиву присвоюється рядковий елемент «8». Винятком становить цифра 16. У цьому випадку в двовимірний масив вводиться пробіл. Вибір строкового елементу здійснюється за допомогою інструкції case.
- Так відбувається до тих пір, поки двовимірний масив не буде повністю заповнений.
5.3.3 Висновок табло.
У даному розділі на екрані з'являється табло з поточною комбінацією цифр. Спочатку, табло заповнюється випадковим чином п. 5.3.2, а в подальшому на екрані буде відображено поточний стану цифр на табло, в залежності від зроблених користувачем ходів.
Даний розділ реалізований в процедурі Vivod.
Загальний алгоритм даного розділу полягає в наступному (Схема 5):
- Промальовування клітин;
- Промальовування рамки;
- Висновок елементів масиву по верх клітин табло.
Початок
Промальовування клітин
Промальовування рамки
Висновок елементів масиву по вгору клітин табло
Кінець


Схема 5 - Розділ Висновок
5.3.3.1 Промальовування клітин.
Малювання клітин здійснюється в наступному порядку:
- Визначення розміру майбутніх клітин, за допомогою двох змінних (h1, w1, координати верхньої лівої і правої нижньої точок);
- За допомогою процедури SetFillStyle, задаємо потрібний колір і стиль заповнення. Колір виберемо синій, а стиль заповнення візьмемо SolidFill - суцільна заливка поточному кольором, тобто синім.
- За допомогою процедури Bar вичерчуємо на екрані квадрат.
- Щоб дані дії не повторювати 16 разів, використовуємо інструкцію For.
5.3.3.2 Промальовування рамки.
Для того, щоб табло мало закінчений вигляд, помістимо раніше створені клітини в рамку, за допомогою процедури Line.
5.3.3.3 Висновок елементів масиву по верх клітин табло.
У підсумку на екрані з'являється табло з шістнадцятьма клітинами, залишається лише в центр цих клітин помістити цифри з двовимірного масиву.
Так як ми знаходимося в графічному режимі, то для виведення елементів двовимірного масиву використовуємо процедуру OutTextXY.
У підсумку на екрані з'явиться достатньо акуратне і не погано оформлене табло з клітинами, в центрі кожної з яких, знаходиться цифра.
У майбутньому, коли користувач буде переміщати клітини, він фактично буде здійснювати операції з масивом і на екран буде виводитися інформація з масиву, в якому здійснена перестановка, а клітини залишаться незмінними.
5.3.4 Пошук чистого елемента.
У даному розділі здійснюється пошук порожнього елемента, щоб надалі щодо нього можна було б здійснювати пересування
Даний розділ реалізований в процедурі Poisk. Програма за допомогою інструкції For і змінних i і j порівнює кожен елемент двовимірного масиву AS, з порожнім елементом, за допомогою інструкції IF і коли знаходить, присвоює значення змінних i і j змінним strok і stolb. Таким чином, змінні strok і stolb як би є координатами порожнього елемента.
Загальний алгоритм даного розділу полягає в наступному (Схема 6):
- Вибір елемента масиву;
- Перевірка, чи є даний елемент пропуском;
- Присвоєння координат рядка та стовпця змінним.
Початок
Вибір елемента масиву
Перевірка
Чи є даний елемент прогалиною


Ні Ні
Так
Присвоєння координат рядка та стовпця змінним
Кінець


Схема 6 - Розділ Пошук
5.3.4.1 Вибір елемента масиву.
За допомогою інструкції For по черзі будемо вибирати кожен елемент масиву.
5.3.4.2 Перевірка, чи є даний елемент пропуском.
За допомогою інструкції If, порівнюємо кожен елемент масиву з пропуском.
5.3.4.3 Запам'ятовування координат пробіл.
Змінним strok і Stolb присвоюємо координати порожнього елемента.

5.3.5 Введення напрямки переходу.
У даному розділі користувачеві пропонується вибрати напрямок переходу клітин з цифрами, щодо порожній клітини. Вибір здійснюється за допомогою курсору, на клавіатурі.
Даний розділ алгоритму реалізований в процедурі Napravlenie.
Фактично деякої змінної ch (типу char) присвоюється код натиснутої клавіші.
Алгоритм процедури полягає в наступному:
- Користувачеві пропонується, за допомогою курсору, ввести напрямки переходу.
- Після того як користувач, натиснув кнопку на клавіатурі, код клавіші присвоюється змінної ch, за допомогою функції readkey.
Наприклад, якщо користувач ввів напрямок курсору вгору, це означає, що користувач натиснув службову клавішу під кодом 72.
5.3.6 Переміщення елементів табло.
У даному розділі, в залежності від напрямку переходу, вибране раніше за допомогою курсору, і місцеположення порожній клітини, відбувається переміщення:
- Стрілка вліво - переміщує вліво цифру, що стоїть праворуч від порожньої клітки;
- Стрілка вправо - переміщає вправо цифру стоїть ліворуч від порожньої клітки;
- Стрілка вниз - переміщає вниз цифру стоїть зверху від порожньої клітки;
- Стрілка вгору - переміщує вгору цифру стоїть знизу від порожньої клітки.
Даний алгоритм реалізований у процедурі Zamena.
Загальний алгоритм даного розділу полягає в наступному (Схема 7):
- Вибір напрямку перестановки;
- Переміщення клітин;
- Запис про чергове зробленому ході.
Початок
Кінець
Вибір напрямку перестановки
Переміщення клітин
Запис про чергове зробленому ході


Схема 7 - Розділ Заміна.
5.3.6.1 Вибір напряму перестановки.
Раніше користувач зробив хід, а це значить, що ми маємо натиснуту службову клавішу, під яким або номером. За допомогою інструкції IF і функції ord, вибирається напрямки перестановки елементів.
5.3.6.2 Переміщення клітин.
У залежності від значень змінних Strok, Stolb, яким було присвоєно координати порожнього елемента в масиві (5.3.4) і обраного напрямку, здійснюється переміщення.
Наприклад, користувач ввів напрямок курсору вгору, це означає, що користувач натиснув службову клавішу під кодом 72, тоді, за допомогою інструкції if і функції ord (if ord (ch) = 72 then), здійснюється переміщення.
Переміщення здійснюється за наступним принципом: порожній клітини, а саме елементу масиву з координатами as [strok, stolb], присвоюється вміст елемента стоїть під порожній клітиною (as [strok, stolb]: = as [strok +1, stolb];), а відповідно елементу, що стоїть під порожній клітиною присвоюється пробіл (as [strok +1, stolb]: = '';).
5.3.6.3 Запис про чергове зробленому ході.
При запуску розділу Гра, деякої змінної hod присвоюється 0. Це означає, що користувач приступив до гри. Після кожного зробленого ходу, значення змінної hod збільшується на одиницю. Надалі ця інформація буде використана, при визначенні кращих результатів.
5.3.7 Перевірка.
У даному розділі програма порівнює поточну комбінацію цифр, з правильною комбінацією. Якщо розклади збігаються, то алгоритм виконаний і здійснюється перехід до наступного пункту, у противному випадку, алгоритм знову повторюється, починаючи з пункту 5.3.3.
Даний розділ реалізований в процедурі proverka.
За замовчуванням логічна змінна prov дорівнює false (брехня). Програма перевіряє якщо елемент першого рядка і першого стовпця дорівнює 1, другий дорівнює двом і т.д. і елемент останнього рядка і останнього стовпця дорівнює пустому елементу, то розклад вважається, виконаний і змінної prov присвоюється значення true (істина).
5.3.8 Підсумок.
У даному розділі, програма зчитує, за яку кількість ходів гравець, виконав необхідний розклад і порівнює з результатами минулих ігор. Якщо гравець розклав табло за більшу кількість ходів, ніж це зробили гравці раніше, тоді програма завершує свою роботу і переходить до Головного меню, в іншому випадку користувачеві пропонується ввести своє ім'я. Надалі його ім'я буде, відображається у списку кращих гравців.
Даний розділ реалізований в процедурі Mesto.
Загальний алгоритм даного розділу полягає в наступному (Схема 8):
- Кількість ходів;
- Зчитування результатів з файлу;
- Перевірка, чи входить даний результат до списку кращих;
- Введення імені;
- Перестановки у файлі результатів;
- Збереження результатів у файл.
Початок
Кількість ходів
Перевірка
чи входить даний результат до списку кращих
Зчитування результатів з файлу
Перестановки результатів


Ні



Так

Введення імені
Кінець
Збереження результатів у файл


Схема - 8 Розділ Підсумок.
5.3.8.1 Кількість ходів
Протягом всієї гри, програма записує кожен зроблений хід. Таким чином, по завершенню гри, тобто коли користувач розклав вірний розклад, а не коли просто покинув гру, ми знаємо точну кількість ходів, за яке гравець розклав розклад (Кількість ходів присвоюється змінної hod).
5.3.8.2 Зчитування результатів з файлу.
У даному розділі програма зчитує дані з файлу res.txt і для зручності обробки цієї інформації, вносить її в два масиви it і res. Масив it містить інформацію про кількість ходів, за яке гравці, що грали раніше розклали розклад, масив res містить імена цих гравців.
5.3.8.3 Перевірка, чи входить даний результат до списку кращих
У даному розділі результат поточного гравця порівнюється з результатами гравців з масиву it.
У разі якщо гравці, що грали раніше розклали розклад за найменшу кількість ходів, то програма завершує свою роботу і переходить до Головного меню, в іншому випадку програма продовжує свою роботу (сл. пункт.)

5.3.8.4 Введення імені.
Користувачеві пропонується ввести своє ім'я, щоб його ім'я і результат були збережені в списку кращих гравців.
5.3.8.5 Перестановки у файлі результатів.
У даному розділі необхідно зробити перестановки в масиві, але потрібно не просто видалити якийсь елемент, а на його місце поставити поточний результат, потрібно здійснити зрушення всіх елементів на один, а якщо поточної результат буде десятим, то замінити його.
Це завдання можна вирішити кількома способами. Один із способів, це здійснювати перестановки безпосередньо в масивах it і res і здійснювати зсув елементів, але, на мій погляд, найбільш простий спосіб, це створити ще два масиви, для зручності назвемо їх itv і resv, і в результаті зробити найпростіші операції переміщення елементів з одного масиву в інший. Ці операції здійснимо за наступною схемою:
За допомогою інструкції For порівнюємо кожен елемент масиву результатів (it), з результатом поточного гравця (змінна hod). Якщо результат гравця з масиву it менше результату поточного гравця, то результат і ім'я гравця з масиву it і res присвоюємо масивів itv і resv. Якщо результат поточного гравця менше ніж черговий елемент масиву it і більше попереднього елемента масиву it, то результат поточного гравця вноситься в черговий елемент масивів itv і його ім'я присвоюється чергового елементу масиву resv, а результат поточного елемента масивів it і res додається в масиви itv і resv за результатами поточного гравця. Відповідно коли інструкція For почне порівнювати наступний елемент масиву it, то результат поточного гравця, буде менше, як поточного так і попереднього елементів масиву it, а це не задовольняє умові. Це означає, що черговий елемент масивів it і res просто додасться за останнім елементом масивів itv і resv. Так буде відбуватися поки масиви itv і resv не будуть повністю заповнені, а останній елемент масивів it і res, відповідно не увійдуть, до новоствореного список кращих гравців, які описані в масивах itv і resv. У підсумку ми здійснимо зрушення результатів на одну позицію.
Для більш повного опису даної процедури розглянемо приклад:
У таблиці 3 розташовані два рядки. У верхній містяться елементи масиву it, а в нижній масиву res.
Таблиця 3 - Масиви it і res.
It
10
20
30
40
50
60
70
80
90
95
res
A
B
C
D
E
F
G
H
K
L
Припустимо, що поточний гравець, під ім'ям Z, переміг за 44 ходу.
Програма починає шукати в якому інтервалі розташований поточної результат (44). Для цього кожен елемент масиву it порівнюється зі змінною hod. Якщо перший елемент менше 44, то його ім'я і результат переноситься в масиви itv і resv, якщо наступний елемент менше 44, то і його переносять в масиви itv і resv (таблиця 4)
Таблиця 4 - Масиви it і res.
Itv
10
20
resv
A
B
Так відбувається до тих пір поки, програма не знайде елемент у масиві it, який більше 44, але при цьому програма перевіряє, що 44 більше і попереднього елемента масиву it. Якщо дана умова виконується, то програма додає результат і ім'я поточного гравця під ім'ям Z, в масиви itv і resv відповідно, а поточний результат з масивів it і res, також додається в масив, але вже за результатами гравця Z (Таблиця 5).

Таблиця 5 - Масиви it і res.
Itv
10
20
30
40
44
50
resv
A
B
C
D
Z
E
У нас вийшло, що 44 менше 50, але більше 40, з цього за результатом 40 додали 44, а за ним поточний елемент з результатом 50.
Далі, при перевірки результату 44 з наступного елементом з результатом 60, 44 буде менше результату 60, але 44 і менше результату 50, а отже, умова не виконується і гравець з результатом 60 переноситься в масиви itv і resv. Так відбувається поки обидва масиви itv і resv, не будуть заповнені. А останній результат відповідно зникне (Таблиця 6)
Таблиця 6 - Масиви it і res.
Itv
10
20
30
40
44
50
60
70
80
90
resv
A
B
C
D
Z
E
F
G
H
K
На перший погляд, все досить ускладнене, але при створенні алгоритму перестановки безпосередньо всередині масивів it і res, виходить ще гірше.
5.3.8.6 Збереження результатів у файл.
У даному розділі інформація з масивів itv і resv вноситься в файл res.txt. Даний файл відкривається в режимі перезапису та інформація у файлі оновлюється і коли користувач видя в Головне меню зайде в розділ Результати, він вже відведе оновлену інформацію з файлу res.txt і відповідно і свій результат.

5.4 Результати.
У даному розділі для користувача відображається інформація про кращих гравців, які за найменшу кількість ходів зібрали необхідну комбінацію.
Даний розділ реалізований за допомогою процедури result. Дана процедура зчитує інформацію з файлу res.txt і виводить зчитану інформацію на екран для ознайомлення користувачеві.
Реалізована дана процедура, точно таким же способом, як і в розділі 5.1 Опис, за винятком, того, що звернення відбувається до файлу res.txt, з цього докладно зупинятися на даному розділі не має сенсу.

6. Опис вхідних і вивідних даних
У таблиці 7 описуються вхідні і вихідні дані, які збудовані приблизно в тому порядку, в якому вони повинні взаємодіяти з користувачем
Таблиця 7 Опис вхідних та вихідних даних
Вхідні
Вихідні
2. Вибір розділу в Головному меню програми
4. Введення за допомогою курсору напрямки переходу:
- Ліворуч;
- Праворуч;
- На початок
- Вниз;
- ESC - покинути гру в будь-який момент
5. Введення імені в разі перемоги за найменшу кількість ходів.
1. Відображення на екрані Головного меню
3. Висновок на екран раніше обраного розділу:
- Опис - виведення на екран опис програми
- Управління - висновок на екран інформацію про клавіші управління
- Результати - виведення на екран списку кращих гравців
- Гра - Вивід на екран табло з комбінацією цифр

7. Програмне та апаратне забезпечення програми.
Для запуску гри достатньо будь-якого комп'ютера, на якому встановлена ​​хоч яка-небудь операційна система, сімейство Windows.
8. Керівництво користувача
9.  
8.1. Для запуску програми необхідно запустити файл Super15.exe. Відкриється Головне меню (Малюнок 1)

Малюнок 1 - Головне меню
Основне меню містить п'ять пунктів:
1. Опис (About program).
2. Управління (Key).
3. Гра (Play).
4. Результати (Results).
5. Вихід (Exit).
Переміщаючись за допомогою курсору вгору або вниз, можна вибирати що Вас цікавлять меню.
8.2 При першому запуску програми користувачеві рекомендується прочитати розділ Опис (Малюнок 2), в якому вказано:
- Призначення програми;
- Розробник;
- Опис програми;

Рисунок 2 - Вікно Опис
8.3 Розділ Управління.
Тут користувачеві виводиться на екран клавіші управління (Малюнок 3).

Рисунок 3 - Управління
8.4 Розділ Гра.
При переході в цей розділ перед користувачем відкривається основне табло гри (Малюнок 4), на якому розташовано 15 цифр, заповнені у випадковому порядку і одне порожнє поле.

Рисунок 4 - Основне ігрове поле.
Управління відбувається за допомогою клавіш курсору:
- Стрілка вліво - переміщує вліво цифру, що стоїть праворуч від порожньої клітки;
- Стрілка вправо - переміщає вправо цифру стоїть ліворуч від порожньої клітки;
- Стрілка вниз - переміщає вниз цифру стоїть зверху від порожньої клітки;
Стрілка вгору - переміщує вгору цифру стоїть знизу від порожньої клітки.
Користувачеві необхідно за допомогою курсору переміщати клітини табло, до тих пір, поки на екрані не з'явиться, послідовна комбінація цифр, як показано на малюнку 5

Малюнок 5 - Ігрове поле з правильно заповненою, комбінацією.
Протягом всієї гри, користувач у будь-який момент може покинути гру, для цього достатньо натиснути клавішу ESC і гра завершує свою роботу, а на екрані з'явиться Головне меню програми.
Протягом всієї гри, програма вважає кожен хід гравця і якщо гравець розкладає необхідну комбінацію, за меншу кількість ходів, ніж це зробили гравці раніше, то після перемоги, користувачеві пропонується ввести своє ім'я та інформація про гравця, який розклав розклад швидше, заноситься до списку кращих гравців (Малюнок 6).

Малюнок 6 - Введіть ім'я
8.5 пункт Результати.
У даному розділі меню можна подивитися результати кращих гравців (Малюнок 7), а саме тих гравців, які зібрали необхідну комбінацію за найменшу кількість ходів.
На екрані невелика табличка в лівому стовпчику Move записано кількість ходів, а в правому Name ім'я гравця.

Малюнок 7 - Список кращих гравців
8.5 Останній пункт меню Вихід.
При натисканні на цей пункт меню, програма завершує свою роботу.

10. Висновок
Не дивлячись на зовні уявну простоту цієї програми, він таїть у собі ряд складнощів, які реалізуються з використанням всіх основних прийомів Турбо Паскаль. Взагалі Турбо Паскаль як середовище програмування вже давно застаріла, але основи, які лежать в середовищі програмуванні в Турбо Паскаль, лежать в болшенство відомих і популярних додатків. На мій погляд, вивчаючи програмування в Турбо Паскаль, можна освоїти основні прийоми програмування.
Метою даної курсової роботи, було поглиблення знань та розширення навичок з розробки алгоритмів та їх реалізації на персональному комп'ютері, на мій погляд, розроблена мною програма, цілком відповідає поставленим цілям. Особливостями даної програми є:
- Чітко побудований алгоритм;
- Інтуїтивно зрозумілий інтерфейс;
- Зручне управління;
- Простота у використанні;
- Цілком зрозуміле керівництво користувача;
- Відсутність зайвих доповнень.

11. Список літератури
10.1 Навчальний посібник. «Основи алгоритмізації та програмування», Є. М. сап'янової
10.2 Самовчитель. «Програмування в Turbo Pascal», Н. Культін.
10.3 Відкриття Інтернет джерела.

Додаток 1 Лістинг програми
program Game;
uses crt, Graph;
var
as: array [1 .. 4,1 .. 4] of string; {Двомірний масив, містить елементи табло}
bs: array [1 .. 16] of integer; {Масив для заповнення випадковими числами}
men: array [1 .. 5] of integer; {Масив виводь елементи Головного меню}
res: array [1 .. 10] of string; {Імена гравців з кращими результатами}
it: array [1 .. 10] of integer; {Результати кращих гравців}
resv: array [1 .. 10] of string; {Масив зі знову сформованим списком кращих гравців}
itv: array [1 .. 10] of integer; {Масив зі знову сформованим списком результатів кращих гравців}
i, j: integer; {Змінні для роботи з масивами}
strok, stolb: integer; {Координати порожнього елемента}
hod: integer; {Лічильник, зчитує кожен хід зроблений користувачем}
lom: integer; {Змінна для роботи з Головним меню}
name: string; {Ім'я грав користувача}
ch: char; {Змінна, якій присвоюється код клавіші, клавіші на клавіатурі}
prov: boolean; {Перевірка правильності розкладу}
f: text; {файлова змінна}
procedure Vivod;
{Процедура виведення на екран табло з цифрами сформоване на момент відображення}
var lx, ly: integer; {Координати виведення двомірного масиву}
x, y: integer; {Координати клітин}
j1, i1: integer; {Змінні лічильники, для малювання клітин}
w1, h1: integer; {Ширина і висота клітин}
begin
OutTextXY (210,50, 'For leaving divss ESC');
w1: = 30;
h1: = 30; {Клітка розміром 30 на 30}
for i1: = 0 to 3 do {Цикл, промальовування клітин}
for j1: = 0 to 3 do
begin
x: = 235 + j1 * 35; {Зрушення клітин за х}
y: = 150 + i1 * 35; {Зрушення клітин по у}
setFillStyle (1,1); {Колір і стиль клітин, колір синій, стиль заповнення поточному кольором}
Bar (x, y, x + w1, y + h1); {Малювання клітини}
end;
lx: = 245;
ly: = 162;
for i: = 1 to 4 do {Цикл виведення двомірного масиву по вгору клітин}
begin
for j: = 1 to 4 do
begin
OutTextXY (lx, ly, as [i, j]); {Виведення тексту на екран}
lx: = lx +35;
end;
lx: = 245;
ly: = ly +35;
end;
line (220,135,220,300); {Малювання рамки}
line (385,135,385,300);
line (220,135,385,135);
line (220,300,385,300);
end;
procedure Tablo;
{Формування табло при першому запуску заповнене випадковими і неповторяющимися цифрами}
var b: integer; {Змінна, якій присвоюється випадкове число}
k, z: integer; {Лічильники для операцій з масивами}
begin
randomize;
For z: = 1 to 16 do
begin
b: = random (15); {Вибір випадкового числа}
k: = 1;
while k <> 17 do {Цикл поки не буде заповнений масив з цілими цифрами}
begin
if bs [k] = b then
begin
b: = random (17);
k: = 1;
end
else k: = k +1;
end;
bs [z]: = b; {Присвоєння чергового неповторяющееся елемента масиву}
end;
z: = 1;
for i: = 1 to 4 do {Заповнення двомірного масиву, замість цифр з одновимірного, присвоюються рядкові елементи}
begin
for j: = 1 to 4 do
begin
case bs [z] of
1: as [i, j]: = '1 ';
2: as [i, j]: = '2 ';
3: as [i, j]: = '3 ';
4: as [i, j]: = '4 ';
5: as [i, j]: = '5 ';
6: as [i, j]: = '6 ';
7: as [i, j]: = '7 ';
8: as [i, j]: = '8 ';
9: as [i, j]: = '9 ';
10: as [i, j]: = '10 ';
11: as [i, j]: = '11 ';
12: as [i, j]: = '12 ';
13: as [i, j]: = '13 ';
14: as [i, j]: = Пул 14 ';
15: as [i, j]: = '15 ';
16: as [i, j]: = '';
end;
z: = z +1;
end;
end;
vivod; {Висновок табло на екран}
end;
Procedure Poisk;
{Пошук чистого елемента в табло}
begin
for i: = 1 to 4 do
begin
for j: = 1 to 4 do
begin
if as [i, j] = '' Then {Пошук, дорівнює чи поточний елемент прогалині}
begin
Strok: = i; {Якщо дорівнює, то присвоюються координати порожнього елемента}
Stolb: = J
end;
end;
end;
end;
procedure bonus;
{Бонус, для перевірки. При натисканні клавіші END на клавіатурі розклад збирається}
begin
as [1,1]: = '1 '; as [1,2]: = '2'; as [1,3]: = '3 '; as [1,4]: = '4';
as [2,1]: = '5 '; as [2,2]: = '6'; as [2,3]: = '7 '; as [2,4]: = '8';
as [3,1]: = '9 '; as [3,2]: = '10'; as [3,3]: = '11 '; as [3,4]: = '12';
as [4,1]: = '13 '; as [4,2]: = Пул 14'; as [4,4]: = '15 '; as [4,3]: =' ';
Strok: = 4; Stolb: = 3;
end;
procedure napravlenie;
{Введення напрямки переходу}
begin
ch: = readkey; {Змінній присвоюється код клавіші користувачем клавіші на клавіатурі}
end;
procedure Zamena;
{Пересування клітин з цифрами в залежності від вибору користувача}
begin
napravlenie; {Процедура, введення напрямки переходу}
if ord (ch) = 79 then bonus; {Якщо натиснута клавіша END на клавіатурі то розклад сам збирається}
if ord (ch) = 75 then {Якщо натиснута клавіша вліво}
begin
if stolb <> 4 then {Якщо це не останній елемент, що стоїть біля кордону табло}
begin
as [strok, stolb]: = as [strok, stolb +1]; {На місце порожнього елемента присвоюється елемент стоїть праворуч від порожнього}
as [strok, stolb +1]: = ''; {Елементу стоїть праворуч від порожнього присвоюється порожній елемент}
stolb: = stolb +1; {Нова координата порожнього елемента}
hod: = hod +1; {Черговий зроблений хід}
end;
end;
if ord (ch) = 72 then {Якщо натиснута клавіша вгору}
begin
if strok <> 4 then {Якщо це не останній елемент, що стоїть біля кордону табло}
begin
as [strok, stolb]: = as [strok +1, stolb]; {На місце порожнього елемента присвоюється елемент стоїть знизу від порожнього}
as [strok +1, stolb]: = ''; {Елементу стоїть знизу від порожнього прісваевается пустий елемент}
strok: = strok +1; {Нова координата порожнього елемента}
hod: = hod +1; {Черговий зроблений хід}
end;
end;
if ord (ch) = 77 then {Якщо натиснута клавіша вправо}
begin
if stolb <> 1 then {Якщо це не останній елемент, що стоїть біля кордону табло}
begin
as [strok, stolb]: = as [strok, stolb-1]; {На місце порожнього елемента присвоюється елемент стоїть ліворуч від порожнього}
as [strok, stolb-1]: = ''; {Елементу стоїть ліворуч від порожнього присвоюється порожній елемент}
stolb: = stolb-1; {Нова координата порожнього елемента}
hod: = hod +1; {Черговий зроблений хід}
end;
end;
if ord (ch) = 80 then {Якщо натиснута клавіша вниз}
begin
if strok <> 1 then {Якщо це не останній елемент, що стоїть біля кордону табло}
begin
as [strok, stolb]: = as [strok-1, stolb]; {На місце порожнього елемента присвоюється елемент стоїть зверху від порожнього}
as [strok-1, stolb]: = ''; {Елементу стоїть зверху від порожнього присвоюється порожній елемент}
strok: = strok-1; {Нова координата порожнього елемента}
hod: = hod +1; {Черговий зроблений хід}
end;
end;
Vivod;
end;
procedure readFile;
{Додає в файл інформацію про кращі результати}
begin
assign (f, 'res.txt'); {Оголошення файлу}
reset (f); {Відкриття файлу}
j: = 1;
for i: = 1 to 10 do
begin
readln (f, res [i]); {Занесення імен кращих гравців з файлу в масив}
readln (f, it [j]); {Занесення результатів кращих гравців в масив}
j: = j +1; {Лічильник для кращих результатів}
end;
close (f);
end;
procedure writeFile;
{Зчитує файл з кращими результатами}
begin
assign (f, 'res.txt'); {Оголошення файлу}
rewrite (f); {Відкриття в режимі перезапису}
for i: = 1 to 10 do
begin
writeln (f, resv [i]); writeln (f, itv [i]); {Внесення інформації про кращих гравців та їхні результати з масивів у файл}
end;
close (f);
end;
procedure Mesto;
{Процедура в якій встановлюється зайняв гравець яке або місце, якщо так то занесення до списку кращих гравців}
var chetcik: integer; {Лічильник, оголошує що інформація про лучім гравці вже внесена, повторної інформації не повинно бути}
begin
if prov = true then {Якщо гравець розклав розклад}
begin
readfile; {Процедура зчитування інформації з файлу з кращими результатами}
chetcik: = 0;
j: = 1;
for i: = 1 to 10 do
begin
if (hod <= it [i]) and (hod> = it [i-1]) and (chetcik <1) then
begin
{Введення імені гравця}
OutTextXY (132,325, 'will Enter name and divss Enter:');
line (400,338,530,338);
GoToXY (52,21);
read (name);
{Присвоєння чергового елементу даних поточного гравця}
itv [i]: = hod;
resv [i]: = name;
j: = j +1;
chetcik: = 1;
end;
{Перенесення з одного масиву в інший}
if j <= 10 then
begin
itv [j]: = it [i];
resv [j]: = res [i];
j: = j +1;
end;
end;
writeFile; {Збереження інформації у файл}
OutTextXY (230,360, 'For leaving divss ENTER');
readln;
end;
end;
procedure proverka;
{Перевірка чи правильно розкладено табло}
begin
prov: = false;
if (as [1,1] = '1 ') and (as [1,2] = '2') and (as [1,3] = '3 ') and (as [1,4] = '4 ')
and (as [2,1] = '5 ') and (as [2,2] = '6') and (as [2,3] = '7 ') and (as [2,4] = '8 ')
and (as [3,1] = '9 ') and (as [3,2] = '10') and (as [3,3] = '11 ') and (as [3,4] = '12 ')
and (as [4,1] = '13 ') and (as [4,2] =' Пул 14 ') and (as [4,3] = '15') and (as [4,4] = '' )
then
begin
prov: = true; {Якщо табло розкладено вірно, то ІСТИНА}
OutTextXY (230,100, 'Congratulate You have won');
Mesto; {Процедура, що встановлює на якому місці поточний користувач}
end;
end;
procedure Game15;
{Підключення графіки і перехід в режим ІГРИ}
var grMode: integer; {Режим роботи відеосистеми}
grPath: string; {Шлях до файлу}
grDriver: integer; {Використовуваний програмою драйвер відеоадаптера}
begin
hod: = 0;
grDriver: = VGA;
grmode: = VGAHi;
grPath: = 'EGAVGA.BGI';
initGraph (grDriver, grMode, grPath); {Ініціалізація графічного режиму}
Tablo; {Формування табло}
Poisk; {Пошук чистого елемента}
repeat {Цикл, поки не натиснута клавіша ESC або поки гравець не переміг грати}
Zamena; {Пересування в масиві}
proverka; {Перевірка чи є даний розклад вірним}
until (ord (ch) = 27) or (prov = true);
closeGraph; {Закриття графічного режиму}
end;
procedure help;
{Перехід в режим довідки}
var f: text; {Файлова змінна}
g1: string; {Змінна для роботи з рядками в файлі}
begin
clrscr;
assign (f, 'fhelp.txt'); {Оголошення файлу}
reset (f); {Відкриття файлу}
readln (f, g1); writeln (g1); {Присвоєння змінній рядка файлу та виведення її на екран}
readln (f, g1); writeln (g1);
readln (f, g1); writeln (g1);
readln (f, g1); writeln (g1);
readln (f, g1); writeln (g1);
readln (f, g1); writeln (g1);
readln (f, g1); writeln (g1);
writeln ('For leaving divss ENTER');
readln;
close (f); {Закриття файлу}
end;
procedure result;
{Відображення кращих гравців}
begin
clrscr;
GoToXY (26,5);
writeln ('Best players');
assign (f, 'res.txt');
reset (f);
readfile; {Зчитування інформації з файлу кращих результатів}
{Виведення на екран у строгому порядку імена та результати кращих гравців}
GoToXY (26,8); write ('Move Name');
GoToXY (26,10); write (it [1]); GoToXY (36,10); writeln (res [1]);
GoToXY (26,11); write (it [2]); GoToXY (36,11); writeln (res [2]);
GoToXY (26,12); write (it [3]); GoToXY (36,12); writeln (res [3]);
GoToXY (26,13); write (it [4]); GoToXY (36,13); writeln (res [4]);
GoToXY (26,14); write (it [5]); GoToXY (36,14); writeln (res [5]);
GoToXY (26,15); write (it [6]); GoToXY (36,15); writeln (res [6]);
GoToXY (26,16); write (it [7]); GoToXY (36,16); writeln (res [7]);
GoToXY (26,17); write (it [8]); GoToXY (36,17); writeln (res [8]);
GoToXY (26,18); write (it [9]); GoToXY (36,18); writeln (res [9]);
GoToXY (26,19); write (it [10]); GoToXY (36,19);; writeln (res [10]);
GoToXY (26,23); writeln ('For leaving divss ENTER');
readln;
end;
procedure avtor;
{Висновок загальної інформації на екран у розділ опис}
var f: text; {Файлова змінна}
g1: string; {Змінна якої присвоюється чергова рядок з файлу і виводиться на екран}
begin
clrscr;
assign (f, 'fhelp1.txt');
reset (f);
readln (f, g1); writeln (g1);
readln (f, g1); writeln (g1);
readln (f, g1); writeln (g1);
readln (f, g1); writeln (g1);
readln (f, g1); writeln (g1);
readln (f, g1); writeln (g1);
readln (f, g1); writeln (g1);
readln (f, g1); writeln (g1);
readln (f, g1); writeln (g1);
readln (f, g1); writeln (g1);
readln (f, g1); writeln (g1);
readln (f, g1); writeln (g1);
readln (f, g1); writeln (g1);
readln (f, g1); writeln (g1);
readln (f, g1); writeln (g1);
readln (f, g1); writeln (g1);
readln (f, g1); writeln (g1);
writeln ('For exit divss ENTER');
readln;
close (f);
end;
begin
{Основна програма}
{Виведення на екран головного меню}
{Елементи Головного меню, один з яких зафарбований білим кольором, а решта зеленим}
men [1]: = 15;
men [2]: = 2;
men [3]: = 2;
men [4]: ​​= 2;
men [5]: = 2;
repeat
clrscr;
strok: = 1; {Поточна рядок}
Lom: = 1;
{Вибір квітів}
GoToXY (32,10); Textcolor (men [1]); writeln ('Key ");
GoToXY (32,11); Textcolor (men [2]); writeln ('About program');
GoToXY (32,12); Textcolor (men [3]); writeln ('Play');
GoToXY (32,13); Textcolor (men [4]); writeln ('Results');
GoToXY (32,14); Textcolor (men [5]); writeln ('Exit');
ch: = readkey; {Вибір напрямку пересування елементів меню}
if (ord (ch) = 80) then {Якщо вниз тоді поточний стає білим, а нижній стає зеленим}
begin
for i: = 1 to 5 do
begin
if (men [i] = 15) and (strok <> 5) then
begin
men [strok]: = 2;
men [strok +1]: = 15;
end
else strok: = strok +1;
end;
end;
if ord (ch) = 72 then {Якщо вгору, то поточний білим, а верхній зеленим}
begin
for i: = 1 to 5 do
begin
if (men [i] = 15) and (strok <> 1) then
begin
men [strok]: = 2;
men [strok-1]: = 15;
end
else strok: = strok +1;
end;
end;
if ord (ch) = 13 then {Якщо натиснуто ENTER}
begin
for i: = 1 to 5 do
begin
if men [i] = 15 then
begin
if Lom = 1 then begin Help; break; end; {Перехід в режим довідки}
if Lom = 2 then begin avtor; break; end; {Перехід до режиму гри}
if Lom = 3 then begin Game15; break; end; {Перехід до режиму гри}
if Lom = 4 then begin result; break; end; {Перехід до режиму гри}
end
else Lom: = Lom +1;
end;
end;
until Lom = 5 {До тих пір поки не натиснутий пункт EXIT}
end.

Додаток 2 Результати роботи.
Для демонстрації результату роботи програми, візьмемо основний розділ ГРА.
При запуску програми з'являється табло, заповнене випадковими неповторяющееся цифрами від 1 до 15 і один порожній елемент (Малюнок 8).

Малюнок 8 - Основне табло з випадковими числами
Далі користувачеві пропонується зробити хід. До приклади перемістити цифру на порожнє місце. Для цього необхідно натиснути клавішу (вгору) на клавіатурі. У результаті цифра один переміститься вгору, а пуста клітка переміщується на місце одиниці (Малюнок 9).

Рисунок 9 - Перший хід
Надалі переміщаючи по однієї клітини, за допомогою курсору, розклад буде виконаний. Весь процес до перемоги може зайняти дуже багато ходів, тому перейдемо до передостаннього моменту.
Наприклад, гравець довго грав і у нього випав наступний розклад (Малюнок 10).

Рисунок 10 - черговий хід.
Тепер користувачеві необхідно зробити один, останній хід, а саме перемістити клітку з цифрою 15 на пустий елемент. У результаті розклад буде виконаний (Малюнок 11).
У випадку якщо гравець розклав потрібний розклад за найменшу кількість ходів, ніж гравці, які грали раніше, то користувачеві пропонується ввести ім'я і надалі його ім'я і результати буде відображатися в розділі Результати (Малюнок 11).

Малюнок 11 - кінець гри
Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Курсова
140.3кб. | скачати


Схожі роботи:
Лімерік неперекладна гра слів або переказується гра форми
Гра Шибениця
Гра Vertolet
Гра крестікінолікі
Гра Tetris
Гра Шибениця 2
Гра дошкільника
Гра 489
Гра в дошкільному віці
© Усі права захищені
написати до нас